/**
 * 所有版权归 广西梧州 陈锦韬 所有
 *
 * @Title: LoginUserInfo
 * @Package com.rx.core.bean
 * @Description: 登录用户信息
 * @author: 陈锦韬
 * @date: 2021\6\25 0025
 * @version V1.0
 * @Copyright: 2021 陈锦韬  All rights reserved.
 */
package com.rx.core.bean;

import cn.hutool.system.UserInfo;
import com.rx.core.base.RxEmpty;
import com.rx.core.dbase.SensitiveInfo;
import com.rx.core.enm.SENSITIVE_TYPE;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;

import java.util.List;

/**
 * @author: Administrator
 * @Description: 登录用户信息
 * @date: 2021\6\25 0025
 */
@Slf4j
@Data
@EqualsAndHashCode(callSuper=false)
public class LoginUserInfo extends RxEmpty {
    private static final long serialVersionUID = 1L;
    /**
     * 用户信息
     */
    UserInfo userInfo;
    /**
     * 当前岗位信息（多岗位切换，暂时不实现）
     */
    PostInfo currentPost;

    /**
     * 角色信息
     */
    List<RoleInfo> roleList;
    /**
     * 加入组织
     */
    List<OrgInfo> orgList;

    @Data
    @EqualsAndHashCode(callSuper=false)
    public static class UserInfo extends RxEmpty{
        /**
         * BID
         */
        private String bid;

        /**
         * 用户类型
         */
        private String userType;
        /**
         * 用户名 登录名
         */
        private String userName;

        /**
         * 真是姓名
         */
        private String realName;

        /**
         * 登录次数
         */
        private Long loginCount;

        /**
         * 性别
         */
        private String sex;

        /**
         * 年龄
         */
        private Long age;
        /**
         * 邮件
         */
        private String email;
        /**
         * 手机
         */
        @SensitiveInfo(SENSITIVE_TYPE.MOBILE_PHONE)
        private String phone;
    }
    @Data
    @EqualsAndHashCode(callSuper=false)
    public static class OrgInfo extends RxEmpty{
        /**
         * BID
         */
        String bid;
        /**
         * 地区编码
         */
        String areaCode;
        /**
         * 根组织
         */
        String rootCode;
        /**
         * 岗位编码
         */
        String orgCode;
        /**
         * 岗位名称
         */
        String orgName;
    }

    @Data
    @EqualsAndHashCode(callSuper=false)
    public static class RoleInfo extends RxEmpty{
        /**
         * BID
         */
        String bid;
        /**
         * 岗位编码
         */
        String roleCode;
        /**
         * 岗位名称
         */
        String roleName;

        /**
         * 冲突标记
         */
        String conflict;
    }
    @Data
    @EqualsAndHashCode(callSuper=false)
    public static class PostInfo extends RxEmpty{
        /**
         * 岗位BID
         */
        String bid;
        /**
         * 岗位编码
         */
        String postCode;
        /**
         * 岗位名称
         */
        String postName;

    }

    public static LoginUserInfo create(Object source){
        LoginUserInfo loginUserInfo = new LoginUserInfo();
        UserInfo userInfo = new UserInfo();
        BeanUtils.copyProperties(source,userInfo);
        loginUserInfo.setUserInfo(userInfo);
        return loginUserInfo;
    }
}
